#tag Class
Protected Class MusicDataObject
	#tag Method, Flags = &h0
		Function DurAsDate() As date
		  dim d as new date
		  
		  d.totalseconds=0
		  
		  d.hour=val(nthfield(DURATION,":",1))
		  d.minute=val(nthfield(DURATION,":",2))
		  d.second=val(nthfield(DURATION,":",3))
		  
		  return d
		End Function
	#tag EndMethod

	#tag Method, Flags = &h0
		Function GetFromDb(objid as integer) As boolean
		  dim rs as recordset
		  
		  if mydb<>nil then
		    rs=mydb.SQLSelect("SELECT * FROM "+app.mprefs.getstring("dbschema")+".musicinfo WHERE objectid="+str(objid))
		    
		    if mydb.error then MsgBox mydb.errormessage
		    
		    if rs<>nil then
		      
		      OBJECTID=objid
		      
		      ALBUMNAME=DefineEncoding(rs.field("ALBUMNAME").stringvalue, Encodings.UTF8)
		      ARRANGER=DefineEncoding(rs.field("ARRANGER").stringvalue, Encodings.UTF8)
		      AUTHORS=DefineEncoding(rs.field("AUTHORS").stringvalue, Encodings.UTF8)
		      CATEGORYID=rs.field("CATEGORYID").integervalue
		      COMPOSERS=DefineEncoding(rs.field("COMPOSERS").stringvalue, Encodings.UTF8)
		      CONDUCTOR=DefineEncoding(rs.field("CONDUCTOR").stringvalue, Encodings.UTF8)
		      COUNTRY=DefineEncoding(rs.field("COUNTRY").stringvalue, Encodings.UTF8)
		      DOCPATH=DefineEncoding(rs.field("DOCPATH").stringvalue, Encodings.UTF8)
		      DURATION=DefineEncoding(rs.field("DURATION").stringvalue, Encodings.UTF8)
		      ENTERED=DefineEncoding(rs.field("ENTERED").stringvalue, Encodings.UTF8)
		      EXTLOCATION=DefineEncoding(rs.field("EXTLOCATION").stringvalue, Encodings.UTF8)
		      EXTSYSTEMID=DefineEncoding(rs.field("EXTSYSTEMID").stringvalue, Encodings.UTF8)
		      GENRESET=DefineEncoding(rs.field("GENRESET").stringvalue, Encodings.UTF8)
		      HIRESPATH=DefineEncoding(rs.field("HIRESPATH").stringvalue, Encodings.UTF8)
		      IMG1PATH=DefineEncoding(rs.field("IMG1PATH").stringvalue, Encodings.UTF8)
		      IMG2PATH=DefineEncoding(rs.field("IMG2PATH").stringvalue, Encodings.UTF8)
		      ISRCCODE=DefineEncoding(rs.field("ISRCCODE").stringvalue, Encodings.UTF8)
		      LORESPATH=DefineEncoding(rs.field("LORESPATH").stringvalue, Encodings.UTF8)
		      LYRICIST=DefineEncoding(rs.field("LYRICIST").stringvalue, Encodings.UTF8)
		      MEMO=DefineEncoding(rs.field("MEMO").stringvalue, Encodings.UTF8)
		      PERFORMER=DefineEncoding(rs.field("PERFORMER").stringvalue, Encodings.UTF8)
		      PLAYMARKSDATA=DefineEncoding(rs.field("PLAYMARKSDATA").stringvalue, Encodings.UTF8)
		      PUBLISHER=DefineEncoding(rs.field("PUBLISHER").stringvalue, Encodings.UTF8)
		      RECORDCODE=DefineEncoding(rs.field("RECCODE").stringvalue, Encodings.UTF8)
		      SHELFCODE=DefineEncoding(rs.field("SHELFCODE").stringvalue, Encodings.UTF8)
		      SOLOINSTRUMENT=DefineEncoding(rs.field("SOLOINSTRUMENT").stringvalue, Encodings.UTF8)
		      SOLOIST=DefineEncoding(rs.field("SOLOIST").stringvalue, Encodings.UTF8)
		      TECHSET=DefineEncoding(rs.field("TECHSET").stringvalue, Encodings.UTF8)
		      TRACKNAME=DefineEncoding(rs.field("TRACKNAME").stringvalue, Encodings.UTF8)
		      YEAR=DefineEncoding(rs.field("YEAR").stringvalue, Encodings.UTF8)
		      
		      
		    end
		    
		  end
		  
		  mainwin.updateview
		  
		  return true
		End Function
	#tag EndMethod

	#tag Method, Flags = &h0
		Function SQLify(s as string) As string
		  S=ReplaceAll(s,"'","''")
		  
		  S=DefineEncoding(s,Encodings.UTF8)
		  
		  return s
		End Function
	#tag EndMethod

	#tag Method, Flags = &h0
		Function UpdateField(field as string) As boolean
		  SELECT CASE FIELD
		    
		  CASE "PLAYMARKSDATA"
		    
		    if mydb<>nil then
		      
		      mydb.SQLEXECUTE("UPDATE "+app.mprefs.getstring("dbschema")+".musicinfo SET PLAYMARKSDATA='"+PLAYMARKSDATA+"' WHERE OBJECTID="+str(OBJECTID))
		      if mydb.error then MsgBox mydb.errormessage
		      
		    end
		    
		  END SELECT
		  
		  return true
		End Function
	#tag EndMethod

	#tag Method, Flags = &h0
		Function Upload(update as boolean) As boolean
		  dim snd,img1,img2,tgt as folderitem
		  
		  dim rs as recordset
		  dim dr as databaserecord
		  dim id as integer
		  dim fname,ext as string
		  
		  progresswin.show
		  progresswin.cancelButton.visible=false
		  
		  if update then //UPDATE EXISTING
		    
		    progresswin.topLine.text="Updating song..."
		    
		    rs=mydb.SQLSelect("SELECT * FROM "+app.mprefs.getstring("dbschema")+".musicinfo WHERE OBJECTID="+str(OBJECTID))
		    
		    if mydb.error then MsgBox mydb.errormessage
		    
		    if rs<>nil then
		      
		      rs.Edit
		      
		      rs.field("albumname").stringvalue=SQLify(ALBUMNAME)
		      rs.field("arranger").stringvalue=SQLify(ARRANGER)
		      rs.field("authors").stringvalue=SQLify(AUTHORS)
		      rs.field("composers").stringvalue=SQLify(COMPOSERS)
		      rs.field("conductor").stringvalue=SQLify(CONDUCTOR)
		      rs.field("country").stringvalue=SQLify(COUNTRY)
		      rs.field("docpath").stringvalue=SQLify(DOCPATH)
		      rs.field("duration").stringvalue=SQLify(DURATION)
		      rs.field("entered").stringvalue=SQLify(ENTERED)
		      rs.field("extlocation").stringvalue=SQLify(EXTLOCATION)
		      rs.field("extsystemid").stringvalue=SQLify(EXTSYSTEMID)
		      rs.field("genreset").stringvalue=SQLify(GENRESET)
		      rs.field("hirespath").stringvalue=SQLify(HIRESPATH)
		      rs.field("img1path").stringvalue=SQLify(IMG1PATH)
		      rs.field("img2path").stringvalue=SQLify(IMG2PATH)
		      rs.field("isrccode").stringvalue=SQLify(ISRCCODE)
		      rs.field("lorespath").stringvalue=SQLify(LORESPATH)
		      rs.field("lyricist").stringvalue=SQLify(LYRICIST)
		      rs.field("memo").stringvalue=SQLify(MEMO)
		      rs.field("performer").stringvalue=SQLify(PERFORMER)
		      rs.field("playmarksdata").stringvalue=SQLify(PLAYMARKSDATA)
		      rs.field("publisher").stringvalue=SQLify(PUBLISHER)
		      rs.field("reccode").stringvalue=SQLify(RECORDCODE)
		      rs.field("shelfcode").stringvalue=SQLify(SHELFCODE)
		      rs.field("soloinstrument").stringvalue=SQLify(SOLOINSTRUMENT)
		      rs.field("soloist").stringvalue=SQLify(SOLOIST)
		      rs.field("techset").stringvalue=SQLify(TECHSET)
		      rs.field("trackname").stringvalue=SQLify(TRACKNAME)
		      rs.field("year").stringvalue=SQLify(YEAR)
		      
		      rs.field("categoryid").integervalue=CATEGORYID
		      
		      rs.update
		      if mydb.error then MsgBox mydb.errormessage
		      MYDB.commit
		      
		    end
		    
		  else // INSERT NEW
		    
		    progresswin.topLine.text="Inserting song..."
		    
		    // GET NEXT ID
		    progresswin.bottomLine.text="Getting next ID..."
		    
		    OBJECTID=GetNextId(true)
		    
		    //INSERT DATABASE RECORD
		    progresswin.bottomLine.text="Inserting database record..."
		    
		    rs=mydb.SQLSelect("SELECT * FROM "+app.mprefs.getstring("dbschema")+".musicinfo WHERE OBJECTID="+str(OBJECTID))
		    
		    if mydb.error then MsgBox mydb.errormessage
		    
		    if rs<>nil then
		      
		      rs.Edit
		      
		      rs.field("albumname").stringvalue=SQLify(ALBUMNAME)
		      rs.field("arranger").stringvalue=SQLify(ARRANGER)
		      rs.field("authors").stringvalue=SQLify(AUTHORS)
		      rs.field("composers").stringvalue=SQLify(COMPOSERS)
		      rs.field("conductor").stringvalue=SQLify(CONDUCTOR)
		      rs.field("country").stringvalue=SQLify(COUNTRY)
		      rs.field("docpath").stringvalue=SQLify(DOCPATH)
		      rs.field("duration").stringvalue=SQLify(DURATION)
		      rs.field("entered").stringvalue=SQLify(ENTERED)
		      rs.field("extlocation").stringvalue=SQLify(EXTLOCATION)
		      rs.field("extsystemid").stringvalue=SQLify(EXTSYSTEMID)
		      rs.field("genreset").stringvalue=SQLify(GENRESET)
		      rs.field("hirespath").stringvalue=SQLify(HIRESPATH)
		      rs.field("img1path").stringvalue=SQLify(IMG1PATH)
		      rs.field("img2path").stringvalue=SQLify(IMG2PATH)
		      rs.field("isrccode").stringvalue=SQLify(ISRCCODE)
		      rs.field("lorespath").stringvalue=SQLify(LORESPATH)
		      rs.field("lyricist").stringvalue=SQLify(LYRICIST)
		      rs.field("memo").stringvalue=SQLify(MEMO)
		      rs.field("performer").stringvalue=SQLify(PERFORMER)
		      rs.field("playmarksdata").stringvalue=SQLify(PLAYMARKSDATA)
		      rs.field("publisher").stringvalue=SQLify(PUBLISHER)
		      rs.field("reccode").stringvalue=SQLify(RECORDCODE)
		      rs.field("shelfcode").stringvalue=SQLify(SHELFCODE)
		      rs.field("soloinstrument").stringvalue=SQLify(SOLOINSTRUMENT)
		      rs.field("soloist").stringvalue=SQLify(SOLOIST)
		      rs.field("techset").stringvalue=SQLify(TECHSET)
		      rs.field("trackname").stringvalue=SQLify(TRACKNAME)
		      rs.field("year").stringvalue=SQLify(YEAR)
		      rs.field("categoryid").integervalue=CATEGORYID
		      
		      //UPLOAD FILE
		      progresswin.bottomLine.text="Uploading audio files..."
		      progresswin.progbar.Enabled=true
		      progresswin.progBar.Maximum=0
		      
		      fname=GetNextFolder
		      
		      if HiresFile<>nil then
		        
		        HiresFile.Name="m"+format(OBJECTID,"00000000")+"."+NthField(HiresFile.Name,".",2)
		        
		        id=Ubound(Session)
		        if id=-1 then id=0
		        
		        rs.field("hirespath").stringvalue="/HIRES/"+fname+"/"+HiresFile.name
		        
		        session.Append New FTPSessionClass(str(id))
		        session(id).SetLoginInfo(app.mprefs.getstring("filehost"),app.mprefs.getstring("fileuser"),app.mPrefs.getstring("filepass"))
		        session(id).SetServerDirectoryPathName("/HIRES/"+fname+"/")
		        session(id).SetLocalFolderItem(HiresFile)
		        session(id).SendBufferSize=app.mprefs.getinteger("ftpbuffersize")
		        session(id).StartPutFile
		        
		      end
		      
		      if LORESFILE<>nil then
		        
		        LoresFile.Name="m"+format(OBJECTID,"00000000")+"."+NthField(LoresFile.Name,".",2)
		        
		        id=Ubound(Session)
		        if id=-1 then id=0
		        
		        rs.field("lorespath").stringvalue="/LORES/"+fname+"/"+LoresFile.name
		        
		        session.Append New FTPSessionClass(str(id))
		        session(id).SetLoginInfo(app.mprefs.getstring("filehost"),app.mprefs.getstring("fileuser"),app.mPrefs.getstring("filepass"))
		        session(id).SetServerDirectoryPathName("/LORES/"+fname+"/")
		        session(id).SetLocalFolderItem(HiresFile)
		        session(id).SendBufferSize=app.mprefs.getinteger("ftpbuffersize")
		        session(id).StartPutFile
		        
		      end
		      
		      if ATTACHMENT<>nil then
		        
		        Attachment.Name="m"+format(OBJECTID,"00000000")+"."+NthField(Attachment.Name,".",2)
		        
		        rs.field("docpath").stringvalue="/DOCS/"+fname+"/"+Attachment.name
		        
		        id=Ubound(Session)
		        if id=-1 then id=0
		        session.Append New FTPSessionClass(str(id))
		        session(id).SetLoginInfo(app.mprefs.getstring("filehost"),app.mprefs.getstring("fileuser"),app.mPrefs.getstring("filepass"))
		        session(id).SetServerDirectoryPathName("/DOCS/"+fname+"/")
		        session(id).SetLocalFolderItem(HiresFile)
		        session(id).SendBufferSize=app.mprefs.getinteger("ftpbuffersize")
		        session(id).StartPutFile
		        
		      end
		      
		      //UPLOAD IMAGES
		      progresswin.bottomLine.text="Uploading image files..."
		      
		      if len(IMG1PATH)>0 then
		        
		        img1=GetFolderItem(IMG1PATH)
		        if img1<>nil then
		          img1.name="m"+format(OBJECTID,"00000000")+"_f."+NthField(Attachment.Name,".",2)
		          
		          rs.field("img1path").stringvalue="/IMG/"+fname+"/"+img1.name
		          
		          id=Ubound(Session)
		          if id=-1 then id=0
		          session.Append New FTPSessionClass(str(id))
		          session(id).SetLoginInfo(app.mprefs.getstring("filehost"),app.mprefs.getstring("fileuser"),app.mPrefs.getstring("filepass"))
		          session(id).SetServerDirectoryPathName("/IMG/"+fname+"/")
		          session(id).SetLocalFolderItem(HiresFile)
		          session(id).StartPutFile
		          
		        end
		      end
		      
		      if len(IMG2PATH)>0 then
		        
		        img2=GetFolderItem(IMG2PATH)
		        if img2<>nil then
		          img2.name="m"+format(OBJECTID,"00000000")+"_r."+NthField(Attachment.Name,".",2)
		          
		          rs.field("img2path").stringvalue="/IMG/"+fname+"/"+img2.name
		          
		          id=Ubound(Session)
		          if id=-1 then id=0
		          session.Append New FTPSessionClass(str(id))
		          session(id).SetLoginInfo(app.mprefs.getstring("filehost"),app.mprefs.getstring("fileuser"),app.mPrefs.getstring("filepass"))
		          session(id).SetServerDirectoryPathName("/IMG/"+fname+"/")
		          session(id).SetLocalFolderItem(HiresFile)
		          session(id).StartPutFile
		          
		        end
		      end
		      
		      rs.update
		      if mydb.error then MsgBox mydb.errormessage
		      MYDB.commit
		      
		    end
		    
		    
		  end
		  
		  progresswin.hide
		  
		  return true
		End Function
	#tag EndMethod


	#tag Property, Flags = &h0
		ALBUMNAME As String
	#tag EndProperty

	#tag Property, Flags = &h0
		ARRANGER As String
	#tag EndProperty

	#tag Property, Flags = &h0
		ATTACHMENT As FolderItem
	#tag EndProperty

	#tag Property, Flags = &h0
		AUTHORS As String
	#tag EndProperty

	#tag Property, Flags = &h0
		CATEGORYID As Integer
	#tag EndProperty

	#tag Property, Flags = &h0
		COMPOSERS As String
	#tag EndProperty

	#tag Property, Flags = &h0
		CONDUCTOR As String
	#tag EndProperty

	#tag Property, Flags = &h0
		COUNTRY As String
	#tag EndProperty

	#tag Property, Flags = &h0
		DOCPATH As String
	#tag EndProperty

	#tag Property, Flags = &h0
		DURATION As String
	#tag EndProperty

	#tag Property, Flags = &h0
		ENTERED As String
	#tag EndProperty

	#tag Property, Flags = &h0
		EXTLOCATION As String
	#tag EndProperty

	#tag Property, Flags = &h0
		EXTSYSTEMID As String
	#tag EndProperty

	#tag Property, Flags = &h0
		GENRESET As String
	#tag EndProperty

	#tag Property, Flags = &h0
		HIRESFILE As Folderitem
	#tag EndProperty

	#tag Property, Flags = &h0
		HIRESPATH As String
	#tag EndProperty

	#tag Property, Flags = &h0
		IMG1 As Picture
	#tag EndProperty

	#tag Property, Flags = &h0
		IMG1PATH As String
	#tag EndProperty

	#tag Property, Flags = &h0
		IMG2 As Picture
	#tag EndProperty

	#tag Property, Flags = &h0
		IMG2PATH As String
	#tag EndProperty

	#tag Property, Flags = &h0
		ISRCCODE As String
	#tag EndProperty

	#tag Property, Flags = &h0
		LORESFILE As Folderitem
	#tag EndProperty

	#tag Property, Flags = &h0
		LORESPATH As String
	#tag EndProperty

	#tag Property, Flags = &h0
		LYRICIST As String
	#tag EndProperty

	#tag Property, Flags = &h0
		MEMO As String
	#tag EndProperty

	#tag Property, Flags = &h0
		OBJECTID As Integer
	#tag EndProperty

	#tag Property, Flags = &h0
		PERFORMER As String
	#tag EndProperty

	#tag Property, Flags = &h0
		PLAYMARKSDATA As String
	#tag EndProperty

	#tag ComputedProperty, Flags = &h0
		#tag Getter
			Get
			  if len(ALBUMNAME)>0 and len(TRACKNAME)>0 and LEN(PERFORMER)>0 and (len(COMPOSERS)>0 or len(AUTHORS)>0) then
			    return true
			  else
			    return false
			  end
			End Get
		#tag EndGetter
		Populated As Boolean
	#tag EndComputedProperty

	#tag Property, Flags = &h0
		PUBLISHER As String
	#tag EndProperty

	#tag Property, Flags = &h0
		RECORDCODE As String
	#tag EndProperty

	#tag Property, Flags = &h0
		SHELFCODE As String
	#tag EndProperty

	#tag Property, Flags = &h0
		SOLOINSTRUMENT As String
	#tag EndProperty

	#tag Property, Flags = &h0
		SOLOIST As String
	#tag EndProperty

	#tag Property, Flags = &h0
		TECHSET As String
	#tag EndProperty

	#tag Property, Flags = &h0
		TRACKNAME As String
	#tag EndProperty

	#tag Property, Flags = &h0
		YEAR As String
	#tag EndProperty


	#tag ViewBehavior
		#tag ViewProperty
			Name="ALBUMNAME"
			Group="Behavior"
			Type="String"
			EditorType="MultiLineEditor"
		#tag EndViewProperty
		#tag ViewProperty
			Name="ARRANGER"
			Group="Behavior"
			Type="String"
			EditorType="MultiLineEditor"
		#tag EndViewProperty
		#tag ViewProperty
			Name="AUTHORS"
			Group="Behavior"
			Type="String"
			EditorType="MultiLineEditor"
		#tag EndViewProperty
		#tag ViewProperty
			Name="CATEGORYID"
			Group="Behavior"
			Type="Integer"
		#tag EndViewProperty
		#tag ViewProperty
			Name="COMPOSERS"
			Group="Behavior"
			Type="String"
			EditorType="MultiLineEditor"
		#tag EndViewProperty
		#tag ViewProperty
			Name="CONDUCTOR"
			Group="Behavior"
			Type="String"
			EditorType="MultiLineEditor"
		#tag EndViewProperty
		#tag ViewProperty
			Name="COUNTRY"
			Group="Behavior"
			Type="String"
			EditorType="MultiLineEditor"
		#tag EndViewProperty
		#tag ViewProperty
			Name="DOCPATH"
			Group="Behavior"
			Type="String"
			EditorType="MultiLineEditor"
		#tag EndViewProperty
		#tag ViewProperty
			Name="DURATION"
			Group="Behavior"
			Type="String"
			EditorType="MultiLineEditor"
		#tag EndViewProperty
		#tag ViewProperty
			Name="ENTERED"
			Group="Behavior"
			Type="String"
			EditorType="MultiLineEditor"
		#tag EndViewProperty
		#tag ViewProperty
			Name="EXTLOCATION"
			Group="Behavior"
			Type="String"
			EditorType="MultiLineEditor"
		#tag EndViewProperty
		#tag ViewProperty
			Name="EXTSYSTEMID"
			Group="Behavior"
			Type="String"
			EditorType="MultiLineEditor"
		#tag EndViewProperty
		#tag ViewProperty
			Name="GENRESET"
			Group="Behavior"
			Type="String"
			EditorType="MultiLineEditor"
		#tag EndViewProperty
		#tag ViewProperty
			Name="HIRESPATH"
			Group="Behavior"
			Type="String"
			EditorType="MultiLineEditor"
		#tag EndViewProperty
		#tag ViewProperty
			Name="IMG1"
			Group="Behavior"
			Type="Picture"
		#tag EndViewProperty
		#tag ViewProperty
			Name="IMG1PATH"
			Group="Behavior"
			Type="String"
			EditorType="MultiLineEditor"
		#tag EndViewProperty
		#tag ViewProperty
			Name="IMG2"
			Group="Behavior"
			Type="Picture"
		#tag EndViewProperty
		#tag ViewProperty
			Name="IMG2PATH"
			Group="Behavior"
			Type="String"
			EditorType="MultiLineEditor"
		#tag EndViewProperty
		#tag ViewProperty
			Name="Index"
			Visible=true
			Group="ID"
			InitialValue="-2147483648"
			InheritedFrom="Object"
		#tag EndViewProperty
		#tag ViewProperty
			Name="ISRCCODE"
			Group="Behavior"
			Type="String"
			EditorType="MultiLineEditor"
		#tag EndViewProperty
		#tag ViewProperty
			Name="Left"
			Visible=true
			Group="Position"
			InitialValue="0"
			InheritedFrom="Object"
		#tag EndViewProperty
		#tag ViewProperty
			Name="LORESPATH"
			Group="Behavior"
			Type="String"
			EditorType="MultiLineEditor"
		#tag EndViewProperty
		#tag ViewProperty
			Name="LYRICIST"
			Group="Behavior"
			Type="String"
			EditorType="MultiLineEditor"
		#tag EndViewProperty
		#tag ViewProperty
			Name="MEMO"
			Group="Behavior"
			Type="String"
			EditorType="MultiLineEditor"
		#tag EndViewProperty
		#tag ViewProperty
			Name="Name"
			Visible=true
			Group="ID"
			InheritedFrom="Object"
		#tag EndViewProperty
		#tag ViewProperty
			Name="OBJECTID"
			Group="Behavior"
			Type="Integer"
		#tag EndViewProperty
		#tag ViewProperty
			Name="PERFORMER"
			Group="Behavior"
			Type="String"
			EditorType="MultiLineEditor"
		#tag EndViewProperty
		#tag ViewProperty
			Name="PLAYMARKSDATA"
			Group="Behavior"
			Type="String"
			EditorType="MultiLineEditor"
		#tag EndViewProperty
		#tag ViewProperty
			Name="Populated"
			Group="Behavior"
			Type="Boolean"
		#tag EndViewProperty
		#tag ViewProperty
			Name="PUBLISHER"
			Group="Behavior"
			Type="String"
			EditorType="MultiLineEditor"
		#tag EndViewProperty
		#tag ViewProperty
			Name="RECORDCODE"
			Group="Behavior"
			Type="String"
			EditorType="MultiLineEditor"
		#tag EndViewProperty
		#tag ViewProperty
			Name="SHELFCODE"
			Group="Behavior"
			Type="String"
			EditorType="MultiLineEditor"
		#tag EndViewProperty
		#tag ViewProperty
			Name="SOLOINSTRUMENT"
			Group="Behavior"
			Type="String"
			EditorType="MultiLineEditor"
		#tag EndViewProperty
		#tag ViewProperty
			Name="SOLOIST"
			Group="Behavior"
			Type="String"
			EditorType="MultiLineEditor"
		#tag EndViewProperty
		#tag ViewProperty
			Name="Super"
			Visible=true
			Group="ID"
			InheritedFrom="Object"
		#tag EndViewProperty
		#tag ViewProperty
			Name="TECHSET"
			Group="Behavior"
			Type="String"
			EditorType="MultiLineEditor"
		#tag EndViewProperty
		#tag ViewProperty
			Name="Top"
			Visible=true
			Group="Position"
			InitialValue="0"
			InheritedFrom="Object"
		#tag EndViewProperty
		#tag ViewProperty
			Name="TRACKNAME"
			Group="Behavior"
			Type="String"
			EditorType="MultiLineEditor"
		#tag EndViewProperty
		#tag ViewProperty
			Name="YEAR"
			Group="Behavior"
			Type="String"
			EditorType="MultiLineEditor"
		#tag EndViewProperty
	#tag EndViewBehavior
End Class
#tag EndClass
